﻿using System;
using System.Net.Sockets;
using Roborally.CommonData.Enums;

namespace Roborally.CommonData.GlobaleTypes
{
    public class NieuweSpelerArgs : EventArgs
    {
        private string naam;
        private TcpClient tcpClient;

        public NieuweSpelerArgs(string naam, TcpClient tcpclient)
        {
            this.naam = naam;
            this.tcpClient = tcpclient;
        }

        public string Naam()
        {
            return naam;
        }

        public TcpClient TcpClient()
        {
            return tcpClient;
        }
    }

    public class BinnenkomendBericht : System.EventArgs
    {
        private string bericht;
        private TcpClient tcpClient;

        public BinnenkomendBericht(string Bericht, TcpClient TcpClient)
        {
            this.bericht = Bericht;
            this.tcpClient = TcpClient;
        }

        public string Bericht()
        {
            return bericht;
        }

        public TcpClient TcpClient()
        {
            return tcpClient;
        }
    }

    public class VertaaldBinnenkomendBericht : System.EventArgs
    {
        private BerichtType berichttype;
        private string bericht;
        private TcpClient tcpClient;

        public VertaaldBinnenkomendBericht(BerichtType Berichttype, string Bericht, TcpClient TcpClient)
        {
            this.berichttype = Berichttype;
            this.bericht = Bericht;
            this.tcpClient = TcpClient;
        }

        public BerichtType BerichtType()
        {
            return berichttype;
        }

        public string Bericht()
        {
            return bericht;
        }

        public TcpClient TcpClient()
        {
            return tcpClient;
        }
    }

    public class DisconnectClientX : System.EventArgs
    {
        private TcpClient tcpClient;
        private bool allclients;

        public DisconnectClientX(TcpClient client, bool all_clients = false)
        {
            this.tcpClient = client;
            this.allclients = all_clients;
        }

        public TcpClient TcpClient()
        {
            return tcpClient;
        }

        public bool AllClients()
        {
            return allclients;
        }
    }

    public class JoinKamerClientX : System.EventArgs
    {
        private TcpClient tcpClient;
        private string kamerNaam;

        /// <summary>
        /// Constructor voor deze args
        /// </summary>
        /// <param name="tcpClient">TCPCLIENT die het verstuurd had</param>
        /// <param name="kamerNaam">De naam van de kamer die gejoined wil worden</param>
        public JoinKamerClientX(TcpClient tcpClient, string kamerNaam)
        {
            this.tcpClient = tcpClient;
            this.kamerNaam = kamerNaam;
        }

        public TcpClient TcpClient
        {
            get { return this.tcpClient; }
        }

        public string KamerNaam
        {
            get { return this.kamerNaam; }
        }
    }

    public class SpelStartenArgs : System.EventArgs
    {
        //optioneel
        private int aantalAi;

        private TcpClient tcpClient;
        private string kamerNaam;

        /// <summary>
        /// Geeft de TcpClient van de host die op start klikte
        /// </summary>
        public TcpClient TcpClient { get { return this.tcpClient; } }

        /// <summary>
        /// De naam van de kamer die gestart moet worden
        /// </summary>
        public string KamerNaam { get { return kamerNaam; }}

        /// <summary>
        /// De constructor voor de argumenten voor het SpelStarten event
        /// </summary>
        /// <param name="tcpClient">tcpclient van de host</param>
        /// <param name="kamerNaam">naam van de te starten kamer</param>
        public SpelStartenArgs(TcpClient tcpClient, string kamerNaam)
        {
            this.tcpClient = tcpClient;
            this.kamerNaam = kamerNaam;
        }
    }
}